Telegram Group & Telegram Channel
Тема: std::optional и return value optimization (RVO)

Когда возвращаешь из функции std::optional<T>, часто задумываешься о лишних копиях. Например, вот так:


std::optional<std::string> make_name(bool valid) {
if (valid) return "Женя";
return std::nullopt;
}


Миф: здесь всегда будет копирование строки.
Реальность: современные компиляторы отлично оптимизируют этот код благодаря RVO (Return Value Optimization). Если возвращаемое значение — временный объект, C++ может создать его сразу в том месте, куда он должен быть возвращён. Копий не будет!

Ещё интереснее с C++17: возвращение {} для std::optional<T> и "str" для строки — это всё равно RVO.

⚠️ Но если возвращаешь существующий объект:


std::optional<std::string> wrap(const std::string& s) {
return s; // здесь копия неизбежна
}


- тут RVO не поможет, потому что возвращаешь уже существующий объект, а не временный.

Вывод:
Не бойся возвращать большие объекты через std::optional! RVO спасает производительность, когда возвращаешь временные объекты.

➡️ @cpp_geek



tg-me.com/cpp_geek/325
Create:
Last Update:

Тема: std::optional и return value optimization (RVO)

Когда возвращаешь из функции std::optional<T>, часто задумываешься о лишних копиях. Например, вот так:


std::optional<std::string> make_name(bool valid) {
if (valid) return "Женя";
return std::nullopt;
}


Миф: здесь всегда будет копирование строки.
Реальность: современные компиляторы отлично оптимизируют этот код благодаря RVO (Return Value Optimization). Если возвращаемое значение — временный объект, C++ может создать его сразу в том месте, куда он должен быть возвращён. Копий не будет!

Ещё интереснее с C++17: возвращение {} для std::optional<T> и "str" для строки — это всё равно RVO.

⚠️ Но если возвращаешь существующий объект:


std::optional<std::string> wrap(const std::string& s) {
return s; // здесь копия неизбежна
}


- тут RVO не поможет, потому что возвращаешь уже существующий объект, а не временный.

Вывод:
Не бойся возвращать большие объекты через std::optional! RVO спасает производительность, когда возвращаешь временные объекты.

➡️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/325

View MORE
Open in Telegram


C geek Telegram | DID YOU KNOW?

Date: |

How to Use Bitcoin?

n the U.S. people generally use Bitcoin as an alternative investment, helping diversify a portfolio apart from stocks and bonds. You can also use Bitcoin to make purchases, but the number of vendors that accept the cryptocurrency is still limited. Big companies that accept Bitcoin include Overstock, AT&T and Twitch. You may also find that some small local retailers or certain websites take Bitcoin, but you’ll have to do some digging. That said, PayPal has announced that it will enable cryptocurrency as a funding source for purchases this year, financing purchases by automatically converting crypto holdings to fiat currency for users. “They have 346 million users and they’re connected to 26 million merchants,” says Spencer Montgomery, founder of Uinta Crypto Consulting. “It’s huge.”

Pinterest (PINS) Stock Sinks As Market Gains

Pinterest (PINS) closed at $71.75 in the latest trading session, marking a -0.18% move from the prior day. This change lagged the S&P 500's daily gain of 0.1%. Meanwhile, the Dow gained 0.9%, and the Nasdaq, a tech-heavy index, lost 0.59%. Heading into today, shares of the digital pinboard and shopping tool company had lost 17.41% over the past month, lagging the Computer and Technology sector's loss of 5.38% and the S&P 500's gain of 0.71% in that time. Investors will be hoping for strength from PINS as it approaches its next earnings release. The company is expected to report EPS of $0.07, up 170% from the prior-year quarter. Our most recent consensus estimate is calling for quarterly revenue of $467.87 million, up 72.05% from the year-ago period.

C geek from us


Telegram C++ geek
FROM USA